/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Componentes;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

/**
 *
 * @author SI-TI
 */
public class C_MenuPestaña extends JTabbedPane {

    private String[] str_NomPestañas;
    private MenuOpcion[] m_Opciones;

    public C_MenuPestaña() {
        this.setBackground(Color.LIGHT_GRAY);
    }

    public C_MenuPestaña(String[] str_NomPestañas) {
        this.str_NomPestañas = str_NomPestañas;
        m_Opciones = new MenuOpcion[str_NomPestañas.length];
        this.setBackground(Color.LIGHT_GRAY);
    }
    /* ***********************************************************************
     ***               Seccion de Setters y Getters                        ***
     *************************************************************************/

    public String[] getStr_NomPestañas() {
        return str_NomPestañas;
    }

    public void setStr_NomPestañas(String[] str_NomPestañas) {
        this.str_NomPestañas = str_NomPestañas;
    }

    public MenuOpcion[] getM_Opciones() {
        return m_Opciones;
    }

    public void setM_Opciones(MenuOpcion[] m_Opciones) {
        this.m_Opciones = m_Opciones;
    }

    public MenuOpcion getMenu(int num) {
        return m_Opciones[num];
    }
    /* ***********************************************************************
     ***               Seccion de Metodos                                  ***
     *************************************************************************/

    public void addMenu(String[] str_NomPestañas) {
        m_Opciones = new MenuOpcion[str_NomPestañas.length];
        for (int i = 0; i < str_NomPestañas.length; i++) {
            m_Opciones[i] = new MenuOpcion();
            m_Opciones[i].setOpaque(false);
            addTab(str_NomPestañas[i], null, m_Opciones[i], str_NomPestañas[i]);
        }
    }

    /**
     * Metodo para crear las opciones del menu de pestaña
     *
     * @param int_NumMenu posicion del menu
     * @param str_Opciones nombre de las opciones
     */
    public void addOpcionesMenu(int int_NumMenu, String[] str_Opciones) {
        m_Opciones[int_NumMenu] = new MenuOpcion(str_Opciones);
        m_Opciones[int_NumMenu].setOpaque(false);
        addTab(str_NomPestañas[int_NumMenu], null, m_Opciones[int_NumMenu], str_NomPestañas[int_NumMenu]);
    }

    /**
     * Metodo para crear las opciones de menu de pestaña con imagenes
     *
     * @param int_NumMenu posicion del menu
     * @param str_Opciones nombre de las opciones
     * @param imagenes imagenes de las opciones
     */
    public void addOpcionesMenu(int int_NumMenu, String[] str_Opciones, ImageIcon[] imagenes) {
        m_Opciones[int_NumMenu] = new MenuOpcion(str_Opciones, imagenes);
        m_Opciones[int_NumMenu].setOpaque(false);
        addTab(str_NomPestañas[int_NumMenu], null, m_Opciones[int_NumMenu], str_NomPestañas[int_NumMenu]);
    }

    public void addOpcionesMenu(int int_NumMenu, String[] str_Opciones, ImageIcon[] imagenes, int int_Filas) {
        m_Opciones[int_NumMenu] = new MenuOpcion(str_Opciones, imagenes, int_Filas);
        m_Opciones[int_NumMenu].setOpaque(false);
        addTab(str_NomPestañas[int_NumMenu], null, m_Opciones[int_NumMenu], str_NomPestañas[int_NumMenu]);
    }

    /* ***********************************************************************
     ***               Seccion de Clases internas                          ***
     *************************************************************************/
    /**
     * Clase para las opciones del menu hereda de JMenu
     */
    public class MenuOpcion extends JPanel {

        private JButton btn_Opciones[];
        private String nomOpciones[];

        public MenuOpcion() {
        }

        /**
         * Crea un Panel con opciones de boton
         *
         * @param nomOpciones
         */
        public MenuOpcion(String nomOpciones[]) {
            setLayout(new BorderLayout());
            if (nomOpciones.length > 0) {
                this.nomOpciones = nomOpciones;
                btn_Opciones = new JButton[nomOpciones.length];
                addComponentes();
            }
        }

        /**
         * Crea un Panel con opciones de boton y a cada boton se le asigna su
         * imagen correspondiente
         *
         * @param nomOpciones
         * @param imagenes
         */
        public MenuOpcion(String nomOpciones[], ImageIcon[] imagenes) {
            setLayout(new BorderLayout());
            if (nomOpciones.length > 0) {
                this.nomOpciones = nomOpciones;
                btn_Opciones = new JButton[nomOpciones.length];
                addComponentes(imagenes);
            }
        }

        public MenuOpcion(String nomOpciones[], ImageIcon[] imagenes, int int_Filas) {
            setLayout(new BorderLayout());
            if (nomOpciones.length > 0) {
                this.nomOpciones = nomOpciones;
                btn_Opciones = new JButton[nomOpciones.length];
                addComponentes(imagenes, int_Filas);
            }
        }

        /**
         * Metodo para agregar el panel con los botones que contara el panel
         */
        private void addComponentes() {
            JPanel panel = new JPanel();
            panel.setOpaque(false);
            int filas = btn_Opciones.length / 3 + 1;
            panel.setLayout(new GridLayout(filas, btn_Opciones.length));
            for (int i = 0; i < btn_Opciones.length; i++) {
                btn_Opciones[i] = new JButton(nomOpciones[i]);
                panel.add(btn_Opciones[i]);
            }
            add(panel, "West");
        }

        private void addComponentes(ImageIcon[] imagenes) {
            JPanel panel = new JPanel();
            panel.setOpaque(false);
            panel.setLayout(new GridLayout(1, btn_Opciones.length));
            for (int i = 0; i < btn_Opciones.length; i++) {
                btn_Opciones[i] = new JButton();
                btn_Opciones[i].setIcon(imagenes[i]);
                btn_Opciones[i].setToolTipText(nomOpciones[i]);
                panel.add(btn_Opciones[i]);
            }
            add(panel, "West");
        }

        private void addComponentes(ImageIcon[] imagenes, int int_Filas) {
            JPanel panel = new JPanel();
            panel.setOpaque(false);
            panel.setLayout(new GridLayout(int_Filas, btn_Opciones.length));
            for (int i = 0; i < btn_Opciones.length; i++) {
                btn_Opciones[i] = new JButton();
                btn_Opciones[i].setIcon(imagenes[i]);
                btn_Opciones[i].setToolTipText(nomOpciones[i]);
                panel.add(btn_Opciones[i]);
            }
            add(panel, "West");
        }

        /**
         * Metodo para obtener la opcion del menu deseado
         *
         * @param num posicion en la que se encuentra la opcion
         * @return btn_Opciones[num]
         */
        public JButton getOpcion(int num) {
            return btn_Opciones[num];
        }

        public JButton[] getOpciones() {
            return btn_Opciones;
        }
    }
}
